package auto.setting;

import auto.common.ImageConvertedBase64;
import auto.common.Login;
import auto.device.Phione;
import io.appium.java_client.AppiumBy;
import io.appium.java_client.AppiumDriver;

import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;


import java.io.IOException;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



//这个地方的方法是用来进行我的存储测试的
public class MyStorage {
//feature1:点击创建我的存储(设置4位数字的密码+设置6位的密码+跳过功能验证+输入密码前后是否一致校验+重置存储功能验证)
    public String foundStorage() throws InterruptedException {
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        //点击我的存储
        if(clickMyStorage(wait,driver)){
            System.out.println("点击我的存储失败");
            return "点击我的存储失败";
        }

        //点击我的存储后首先对跳过按钮进行检测
        String result=skipSettingPassword(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //4位数字密码进行检测
        result=fourDigitCodeTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //6位数字密码进行检测
        result=sixDigitCodeTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //退出重新登录并创建存储密码
        result=loginVerifyStoragePassword(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        System.out.println("创建我的存储成功,及其创建过程功能验证通过");
        driver.quit();
        return "创建我的存储成功,及其创建过程功能验证通过";
    }


//feature2:我的存储重置功能检测
    public String storageReset() throws InterruptedException {
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        if(clickMyStorage(wait,driver)){
            System.out.println("点击我的存储失败");
            return "点击我的存储失败";
        }

        //检测当前我的存储的页面是什么状态
        String result=storageUsageCondition(wait,driver);
        if(result.equals("创建存储按钮存在")){
            System.out.println("当前我的存储尚未创建,可先使用创建存储");
            driver.quit();
            return "当前我的存储尚未创建,可先使用创建存储";
        }
        else if(result.equals("请重试")){
            System.out.println("请返回到设置页面重新执行脚本");
            driver.quit();
            return "请返回到设置页面重新执行脚本";
        }

        //到达这里就默认是已经创建过了,打开或者没有打开,开始执行重置
        result=storageResetTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();;
            return result;
        }


        System.out.println("我的存储重置功能正常");
        driver.quit();
        return "我的存储重置功能正常";
    }




//feature3：我的存储详情页面的免打扰和搜索功能的检测
    public String noDisturbingAndSearchDetection() throws InterruptedException, IOException {
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        if(clickMyStorage(wait,driver)){
            System.out.println("点击我的存储失败");
            return "点击我的存储失败";
        }

        //检测当前我的存储的页面是什么状态
        String result=storageUsageCondition(wait,driver);
        if(result.equals("创建存储按钮存在")){
            System.out.println("当前我的存储尚未创建,可先使用创建存储");
            driver.quit();
            return "当前我的存储尚未创建,可先使用创建存储";
        }
        else if(result.equals("请重试")){
            System.out.println("请返回到设置页面重新执行脚本");
            driver.quit();
            return "请返回到设置页面重新执行脚本";
        }

        //首先进行免打扰功能的检测
        result=noDisturbingTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //搜索功能的测试
        result=searchTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }


        System.out.println("免打扰和搜索功能正常");
        driver.quit();
        return "免打扰和搜索功能正常";
    }


//feature4:我的存储页面发送各种各样的信息
    public String storageSendMessage() throws InterruptedException {
        Phione phione = new Phione();
        AppiumDriver driver = phione.driver;
        WebDriverWait wait = phione.wait;

        if(clickMyStorage(wait,driver)){
            System.out.println("点击我的存储失败");
            return "点击我的存储失败";
        }

        //我的存储会话页面如果没有创建,就返回让指向创建,如果是没有打开就打开,如果打开了就停留在这个页面
        String result=storageUsageCondition(wait,driver);
        if(result.equals("创建存储按钮存在")){
            System.out.println("当前我的存储尚未创建,可先使用创建存储");
            driver.quit();
            return "当前我的存储尚未创建,可先使用创建存储";
        }
        else if(result.equals("请重试")){
            System.out.println("请返回到设置页面重新执行脚本");
            driver.quit();
            return "请返回到设置页面重新执行脚本";
        }

        //到达这里就默认是已经创建过了,打开或者没有打开,开始执行重置
        //检测打开存储按钮是否存在，如果存在就执行打开存储的功能
        result=openStorageTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            return result;
        }


        result=sendMessageTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }


        System.out.println("发送各种文件成功");
        driver.quit();
        return "我的存储页面发送各种信息检测正常";
    }







    //-----------------------------下面的私有方法供上面的公有方法使用-------------------------------
    //feature:点击我的存储页面,没有成功的点击返回true,成功的点击了返回false
    private boolean clickMyStorage(WebDriverWait wait, AppiumDriver driver){
        //点击设置按钮进入到设置页面
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("设置"))).click();
        }catch(TimeoutException e){
            System.out.println("请把软件处于软件主页面");
            return true;
        }

        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储"))).click();
        }catch(TimeoutException e){
            System.out.println("我的存储页面消失");
            return true;
        }

        return false;
    }


    //feature:创建存储过程中,跳过设置密码的测试验证-------feature1用
    private String skipSettingPassword(WebDriverWait wait, AppiumDriver driver){
        //首先检测创建存储的按键是不是消失了
        try{
            Thread.sleep(1000);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"创建存储\"`]"))).click();
            System.out.println("创建存储按钮出现正常");
        }catch(NoSuchElementException e){
            return "创建存储按钮未出现,如果已经创建存储,请先重置存储";
        } catch (InterruptedException e) {
            return "请重试";
        }

        //检查跳过的按钮是不是消失了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("跳过"))).click();
            System.out.println("跳过按钮出现正常");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("输入消息")));
            System.out.println("成功进入我的存储会话页面");
        }catch(TimeoutException e){
            System.out.println("创建密码页面跳过按钮消失或者点击跳过后没反应");
            return "创建密码页面跳过按钮消失或者点击跳过后没反应";
        }

        //点击上方的我的存储开始重置,然后点击更多,然后点击出现的我的存储.点击出现的确定
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储"))).click();
            //更多按钮元素无法定位,使用base64的方式
            String moreButtonPath="src/main/resources/image/moreButton.png";
            String moreButtonPath64= ImageConvertedBase64.encodeImageToBase64(moreButtonPath);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.image(moreButtonPath64))).click();

            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("重置我的存储"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("重置"))).click();
        }catch (TimeoutException e){
            System.out.println("我的存储重置失败");
            return "跳过测试之后,我的存储重置失败";
        }

        //查看页面是不是重置成功了
        //首先检测创建存储的按键是不是消失了
        try{
           wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"创建存储\"`]")));
            System.out.println("创建存储按钮出现正常");
        }catch(TimeoutException e){
            return "点击重置存储按钮后没有反应";
        }

        System.out.println("创建存储密码过程跳过功能正常");
        return "正常";
    }


    //feature:创建存储过程中使用4位数字密码测试验证-----feature1使用
    private String fourDigitCodeTest(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {

        //点击
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"创建存储\"`]"))).click();

        System.out.println("开始进行4位数字的密码验证");
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("密码选项"))).click();
        }catch(TimeoutException e){
            System.out.println("密码选项按钮消失或者点击无反应");
            return "密码选项消失或者点击无反应";
        }

        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"4位数字密码\"`]"))).click();
            System.out.println("点击密码选项后出现");
        }catch (NoSuchElementException e){
            System.out.println("4位数字密码选项没有出现");
            return "4位数字密码选项没有出现";
        }
        Thread.sleep(2000);
        //点击后查看输入的密码的位数是否发生变化
        try{
            driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeImage[`name == \"circle\"`][5]"));
            System.out.println("点击4位数字密码选项后,密码位数没有变更");
            return "点击4位数字密码选项后,密码位数没有变更";
        }catch (NoSuchElementException e){
            System.out.println("选中4位密码后,密码修改为设置4位");
        }

        System.out.println("切换为四位数字后开始输入密码");
        try{
            System.out.println("开始设置密码:密码为1234");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("1"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            System.out.println("第一次输入密码成功");
        }catch(TimeoutException e){
            return "第一次输入密码按键缺失";
        }


        //第二次输入密码,第一次输入密码后需要自动跳转到第二个页面输入
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon_password_2")));
            System.out.println("第一次输入密码后,跳转到第二个页面成功");
        }catch(TimeoutException e){
            return "第一次输入密码后没有跳转到再次输入的页面";
        }

        //输入和第一次不一样的密码,查看是不是能够成功的校验
        System.out.println("输入与第一次不一样的密码做校验,输入的密码为2345");
        try{
            System.out.println("开始输入2345");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("5"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("两次输入的密码不一致")));
            System.out.println("两次密码输入不一致成功出现提示,前后两次密码输入不一致校验成功");
        }catch(TimeoutException e){
            return "第二次输入密码按键缺失或输入密码不一致的提示未出现";
        }

        //开始输入和第一次输入的一样的密码,查看是不是能够成功的设置我的存储
        System.out.println("输入与第一次相同的密码做校验,输入的密码为1234");
        try{
            System.out.println("开始输入1234");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("1"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("输入消息")));
            System.out.println("输入1234后创建成功,密码校验成功");
        }catch(TimeoutException e){
            return "第二次输入密码按键缺失或两次输入相同密码后没有跳转到我的存储会话页面";
        }


        //然后再次重置存储密码,方便6位数字的设置
        //点击上方的我的存储开始重置,然后点击更多,然后点击出现的我的存储.点击出现的确定
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储"))).click();
            //更多按钮元素无法定位,使用base64的方式
            String moreButtonPath="src/main/resources/image/moreButton.png";
            String moreButtonPath64= ImageConvertedBase64.encodeImageToBase64(moreButtonPath);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.image(moreButtonPath64))).click();

            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("重置我的存储"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("重置"))).click();
        }catch (TimeoutException e){
            System.out.println("我的存储重置失败");
            return "跳过测试之后,我的存储重置失败";
        }


        //查看页面是不是重置成功了
        //首先检测创建存储的按键是不是消失了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"创建存储\"`]")));
            System.out.println("创建存储按钮出现正常");
        }catch(TimeoutException e){
            return "点击重置存储按钮后没有反应";
        }

        System.out.println("创建存储切换4位密码并设置功能正常");
        return "正常";
    }



    //feature:创建存储过程中使用6位数字的密码测试验证----feature1使用
    private String sixDigitCodeTest(WebDriverWait wait, AppiumDriver driver){
        //4位数密码检测已经对这个创建存储的按钮检测成功了
        driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"创建存储\"`]")).click();

        System.out.println("开始进行6位数字的密码验证");
        //开始第一次输入密码
        try{
            System.out.println("开始设置密码:密码为123456");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("1"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("5"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("6"))).click();
            System.out.println("第一次输入密码成功");
        }catch(TimeoutException e){
            return "第一次输入密码按键缺失";
        }

        //第二次输入密码,第一次输入密码后需要自动跳转到第二个页面输入
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon_password_2")));
            System.out.println("第一次输入密码后,跳转到第二个页面成功");
        }catch(TimeoutException e){
            return "第一次输入密码后没有跳转到再次输入的页面";
        }

        //输入和第一次不一样的密码,查看是不是能够成功的校验
        System.out.println("输入与第一次不一样的密码做校验,输入的密码为23456");
        try{
            System.out.println("开始输入234567");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("5"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("6"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("7"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("两次输入的密码不一致")));
            System.out.println("两次密码输入不一致成功出现提示,前后两次密码输入不一致校验成功");
        }catch(TimeoutException e){
            return "第二次输入密码按键缺失或输入密码不一致的提示未出现";
        }

        //开始输入和第一次输入的一样的密码,查看是不是能够成功的设置我的存储
        System.out.println("输入与第一次相同的密码做校验,输入的密码为123456");
        try{
            System.out.println("开始输入123456");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("1"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("5"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("6"))).click();
            WebElement messageBox=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("输入消息")));

            System.out.println("输入123456后创建成功,密码校验成功");
        }catch(TimeoutException e){
            return "第二次输入密码按键缺失或两次输入相同密码后没有跳转到我的存储会话页面";
        }

        //点击左上角返回到设置页面
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue"))).click();
        }catch(TimeoutException e){
            System.out.println("我的存储会话页面左上角返回键消失");
            return "我的存储会话页面左上角返回键消失";
        }

        System.out.println("创建存储6位密码并设置功能正常");

        //在设置页面下滑一下
        Map<String, Object> argsDown = new HashMap<>();
        argsDown.put("direction", "down");
        driver.executeScript("mobile: swipe", argsDown);

        return "正常";
    }


    //feature:创建完存储密码后,记录当前账号手机号并登录,输入存储密码进行打开 ----feature1使用
    private String loginVerifyStoragePassword(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        String firstUser = "**/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                "/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                "/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[1]";

        //保存激活用户的昵称和用户名，下标0是用户名和手机号码
        WebElement user1Element = driver.findElement(AppiumBy.iOSClassChain(firstUser));
        List<WebElement> nickNameAndUSerName=driver.findElement(AppiumBy.iOSClassChain(firstUser)).
                findElements(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText"));

        //提取设置页面的手机号
        String user1PhoneAndUserName=nickNameAndUSerName.get(0).getAttribute("value");
        String user1Phone=user1PhoneAndUserName.substring(3,user1PhoneAndUserName.indexOf('@')-1).replace(" ", "");;
        System.out.println("设置页面显示的手机号是："+user1Phone);
        System.out.println("默认密码是123456");

        //进入详情页面退出账号
        user1Element.click();
        Map<String, Object> argsDown = new HashMap<>();
        argsDown.put("direction", "up");
        driver.executeScript("mobile: swipe", argsDown);
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("退出账户"))).click();
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("退出"))).click();


        //如果是从添加账号进行的登录，就会执行段代码。如果设备没有登录任何账号，就不会执行
        try {
            Thread.sleep(1000);
            //点击设置
            driver.findElement(AppiumBy.accessibilityId("设置")).click();

            //点击添加账号
            WebElement account = wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("addAccount")));
            account.click();
        } catch (NoSuchElementException e) {
            System.out.println("当前设备没有登录任何账号");
        }


        //退出重新登录这个账号
        String result=Login.login(wait,driver,user1Phone,"123456");
        if(!result.equals("正常")){
            System.out.println(result);
            driver.quit();
            return result;
        }

        //进入设置页面点击我的存储,并且已经开启我的存储的账号,页面上面应该出现的是打开存储,而不是创建存储
        if(clickMyStorage(wait,driver)){
            System.out.println("点击我的存储失败");
            return "点击我的存储失败";
        }

        //创建过存储的重新打开应该是打开存储
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"打开存储\"`]"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("1"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("5"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("6"))).click();
        }catch(TimeoutException e){
            System.out.println("退出重新打开存储失败");
            return "退出账号重新登陆,打开存储失败";
        }

        Thread.sleep(1000);
        //检测输入完密码之后,会怎么样
        try{
            driver.findElement(AppiumBy.accessibilityId("云盘密码错误"));
            System.out.println("重新登陆存储密码验证失败");
            return "重新登陆密码验证失败";
        }catch(NoSuchElementException e){
            System.out.println("重新登录存储密码验证成功");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("返回"))).click();
        }

        //此时输入框应该已经出现
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("输入消息")));
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue"))).click();
        }catch(TimeoutException e){
            System.out.println("存储页面没有成功打开");
            return "重新登录存储页面没有成功打开";
        }

        //检测是不是成功返回到设置页面了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"设置\"`]")));
        }catch(TimeoutException e){
            System.out.println("点击返回到设置页面失败");
            return "返回到设置页面失败";
        }
        return "正常";
    }


    //feature:检测当前我的存储状态是什么-----feature2   feature3 使用
    private String storageUsageCondition(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        Thread.sleep(2000);

        //首先查看是不是正在使用中
        try{
            driver.findElement(AppiumBy.accessibilityId("输入消息"));
            System.out.println("存储页面已经开启");
            return "存储页面已经开启";
        }catch(NoSuchElementException e){
            System.out.println("存储页面没有开启");
        }

        //再次检查是不是已经创建但是还未打开
        try{
            driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"打开存储\"`]"));
            System.out.println("打开存储按钮存在");
            return "打开存储按钮存在";
        }catch(NoSuchElementException e){
            System.out.println("存储尚未创建");
        }

        //再次检查就应该是没有创建过我的存储
        try{
            driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"创建存储\"`]"));
            System.out.println("创建存储按钮存在");
            return "创建存储按钮存在";
        }catch(NoSuchElementException e){
            System.out.println("请重试");
        }

        return "请重试";
    }


    //feature：专门用来检测打开存储按钮这个按钮是不是存在的，如果存在就执行打开，如果不存在就不进行操作。这个方法过后存储页面就打开了-----feature2,feature3使用
    private String openStorageTest(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        Thread.sleep(1000);
        //首先查看打开存储按钮是不是存在
        try{
            WebElement openButton=driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"打开存储\"`]"));
            openButton.click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("1"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("2"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("3"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("4"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("5"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("6"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("返回"))).click();
        }catch(NoSuchElementException e){
            //没有找到就说明已经打开了
            System.out.println("没有检查到打开存储按钮");
        }catch(TimeoutException e){
            return "键盘按键缺失或者返回按键缺失";
        }

        //检测是不是当前存储已经打开.
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("输入消息")));
        }catch(TimeoutException e){
            System.out.println("我的存储打开失败");
            return "我的存储打开失败";
        }

        return "正常";
    }


    //feature:执行重置存储的过程------feature2使用
    private String storageResetTest(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        //检测打开存储按钮是否存在，如果存在就执行打开存储的功能
        String result=openStorageTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            return result;
        }

        //开始重置的过程
        //点击上方的我的存储开始重置,然后点击更多,然后点击出现的我的存储.点击出现的确定
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储"))).click();
            //更多按钮元素无法定位,使用base64的方式
            String moreButtonPath="src/main/resources/image/moreButton.png";
            String moreButtonPath64= ImageConvertedBase64.encodeImageToBase64(moreButtonPath);
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.image(moreButtonPath64))).click();

            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("重置我的存储"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("重置"))).click();
        }catch (TimeoutException e){
            System.out.println("我的存储重置失败");
            return "我的存储重置失败";
        }

        //查看页面是不是重置成功了
        //首先检测创建存储的按键是不是消失了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"创建存储\"`]")));
            System.out.println("创建存储按钮出现正常");
        }catch(TimeoutException e){
            return "点击重置存储按钮后没有反应";
        }
        //点击左上角的返回
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue"))).click();
        //检测是不是成功返回到设置页面了
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"设置\"`]")));
        }catch(TimeoutException e){
            System.out.println("点击返回到设置页面失败");
            return "返回到设置页面失败";
        }

        System.out.println("重置我的存储成功");

        return "正常";
    }


    //feature：免打扰功能的测试----feature3使用
    private String  noDisturbingTest(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        //保证我的存储会话页面已经打开出现会话框,如果没有创建过,将直接返回
        String result=openStorageTest(wait,driver);
        if(!result.equals("正常")){
            System.out.println(result);
            return result;
        }
        //点击进入我的存储详情页面
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储"))).click();
        Thread.sleep(1000);


        //用来存储免打扰的这个按钮
        WebElement featureButton;

        //这个变量用来检测当前的免打扰是打开了还是关闭了,打开或者关闭
        String buttonState="未知";

        //判断当前按钮的状态是什么,如果是免打扰按钮状态就是关闭,如果是取消免打扰按钮,状态就是开启
        try{//首先查看是不是出现的免打扰
            featureButton=driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"免打扰\"`]"));
            System.out.println("当前免打扰尚未开启");
            buttonState="关闭";
        }catch (NoSuchElementException e){
            //抛异常就检查是不是已经关闭了
            try{
                featureButton=driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"取消免打扰\"`]"));
                System.out.println("当前免打扰已经开启");
                buttonState="开启";
            }catch(NoSuchElementException e1){
                //如果既没有打开有没有关闭,检测不到就是这个按钮消失了
                return "免打扰功能按钮消失";
            }
        }

        //不管这个按钮是什么,点击这个按钮
        Rectangle rect = featureButton.getRect();

        // 计算元素中心点的坐标
        int centerX = rect.x + (rect.width / 2);
        int centerY = rect.y + (rect.height / 2);

        // 使用 executeScript 来执行点击操作
        Map<String, Object> params = new HashMap<>();
        params.put("x", centerX);
        params.put("y", centerY);
        driver.executeScript("mobile: tap", params);


        //(1)点击免打扰按钮后,对出现的免打扰选项进行检测.首先检查免打扰/关闭免打扰选项
        try{
            //这个地方是通过外层的免打扰按钮的状态进行判断,如果是关闭状态,就走打开的流程,如果是打开的状态就走关闭的流程
            if(buttonState.equals("关闭")){//走打开的流程,开始检查选项
                System.out.println("准备点击这个选项");

                //点击这个开启免打扰的选项
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                        "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther" +
                        "/XCUIElementTypeOther/XCUIElementTypeScrollView/XCUIElementTypeOther[2]/XCUIElementTypeScrollView/XCUIElementTypeButton[`name == \"免打扰\"`]"))).click();

                //查看免打扰的页面是不是出现了
                try{
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.className("XCUIElementTypePickerWheel")));
                    //点击确定
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"确定\"`]"))).click();

                }catch (TimeoutException e){
                    return "弹出的设置时间页面显示错误";
                }

                //免打扰选项设置好时间后,检查最外层的按钮是不是改编为 "取消免打扰",并且按钮内部应该出现选项 "关闭免打扰"
                try{
                    //等待两秒让其变化
                    Thread.sleep(4000);
                    //检查最外层的按钮是不是有变化
                    driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"取消免打扰\"`]"));
                    System.out.println("成功设置免打扰");

                    //再次点击免打扰/取消免打扰 按钮这个区域
                    driver.executeScript("mobile: tap", params);


                    System.out.println("最外层按钮成功变成取消免打扰");
                    //检查里面的第一个免打扰选项是不是变化了,应该变成 "关闭免打扰的这个选项",出现后就是正常的
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("关闭免打扰")));
                    System.out.println("关闭免打扰选项正常出现");
                }catch (NoSuchElementException e1){
                    return "设置免打扰过后,最外层按钮没有变化";
                }
                catch(TimeoutException e2){
                    return "免打扰开启后,按钮内部缺少关闭免打扰选项";
                }
            }
            else{//走关闭的流程
                //查看选项的关闭免打扰的选项是不是出现了
                try{
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("关闭免打扰"))).click();
                }catch(TimeoutException e){
                    return "点击按钮后,关闭免打扰的选项没有出现";
                }

                //点击选项之后,查看外层的按钮的有没有变化,正常情况下应该是变成 "免打扰"按钮
                try{
                    Thread.sleep(4000);

                    //检查最外层的按钮有没有变化
                    driver.findElement(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"免打扰\"`]"));
                    //点击这个区域
                    driver.executeScript("mobile: tap", params);
                }catch(NoSuchElementException e){
                    return "点击关闭免打扰选项后,最外层的按钮没有免打扰按钮";
                }

                //再次点击按钮,检查内部的选项是不是成功的变为 "开启免打扰"
                try{
                    wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                            "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther" +
                            "/XCUIElementTypeOther/XCUIElementTypeScrollView/XCUIElementTypeOther[2]/XCUIElementTypeScrollView/XCUIElementTypeButton[`name == \"免打扰\"`]")));
                    System.out.println("关闭免打扰后,按钮内部的选项成功变为开启免打扰");
                }catch(TimeoutException e){
                    return "关闭免打扰后,点击按钮没有出现开启免打扰选项";
                }
            }
        }catch(TimeoutException e){
            return "免打扰按钮的免打扰选项没有出现";
        }




        //(2)免打扰选项检查完毕后,最后会点击按钮出现这三个选项,可以直接进行选项的查看
        //查看提示音选项有没有出现
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("提示音"))).click();

            //查看是否成功跳转到提示音页面
            try{
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("Note（默认）"))).click();
                System.out.println("成功跳转到消息提示音页面");
                //点击取消按钮
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("cancel_button"))).click();
            }catch(TimeoutException e){
                return "点击提示音选项后,没有跳转到消息提示音页面";
            }

            //查看点击取消后,消息提示音弹窗有没有消失
            try{
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储")));
                //提示音选项正常
            }catch(TimeoutException e){
                return "点击取消选项后,消息提示音弹窗没有消失";
            }
        }catch(TimeoutException e){
            return "提示音选项没有出现";
        }



        //(3)打开/关闭 提示音的检测.上一个弹窗检查后,需要自行点击 打扰/免打扰 按钮
        WebElement promptButton;

        //查看关闭提示音/打开提示音选项是否开启
        try{//首先查看是不是打开提示音
            driver.executeScript("mobile: tap", params);
            Thread.sleep(1000);
            //首先查看是不是执行的打开提示音的逻辑
            promptButton=driver.findElement(AppiumBy.accessibilityId("打开提示音"));

            //如果是打开提示音就可以直接进行点击了
            promptButton.click();
            driver.executeScript("mobile: tap", params);
            Thread.sleep(1000);
            //查看点击过后是否变成关闭提示音选项
            try{
                driver.findElement(AppiumBy.accessibilityId("关闭提示音"));
            }catch(NoSuchElementException e){
                return "点击打开提示音选项后,提示音选项没有变化";
            }
        }catch(NoSuchElementException e){
            try{
                promptButton=driver.findElement(AppiumBy.accessibilityId("关闭提示音"));
                promptButton.click();
                driver.executeScript("mobile: tap", params);
                Thread.sleep(1000);
                //查看点击过后是否变成打开提示音选项
                try{
                    driver.findElement(AppiumBy.accessibilityId("打开提示音"));
                }catch(NoSuchElementException e1){
                    return "点击关闭提示音选项后,提示音选型没有变化";
                }
            }catch(NoSuchElementException e1){
                return "打开/关闭提示音 选项消失";
            }
        }

        //提示音检查玩意,点击任意位置收回弹窗选项
        driver.executeScript("mobile: tap", params);

        return "正常";
    }



    //feature:我的存储页面-搜索功能测试----feature3用
    private String searchTest(WebDriverWait wait, AppiumDriver driver){
        //检测完免打扰/取消免打扰 按钮和选项后,接着检查搜索的功能
        //点击返回在会话框中输入一些内容
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("返回"))).click();
        }catch(TimeoutException e){
            return "我的存储页面返回按钮消失";
        }

        try{
            WebElement textBox=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._inputTextView")));
            textBox.click();
            textBox.sendKeys("测试");
            //点击发送信息
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._sendButton"))).click();

            //点击进入我的详情页面
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储"))).click();

            //查看搜索按钮是不是消失了
            try{
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"搜索\"`]"))).click();
            }catch (TimeoutException e){
                return "我的存储详情页面搜索按钮消失";
            }


            String result;
            //(1)检查是不是跳转页面成功,如果跳转成功
            try{
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("搜索")));
            }catch(TimeoutException e){
                return "点击搜索按钮后,没有进入搜索页面";
            }

            //点击取消按钮,观察搜索栏是不是消失了
            try{
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"取消\"`]"))).click();

                //查看会话页面消息框是不是出现了,如果出现就是正常的
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("输入消息")));
            }catch(TimeoutException e){
                return "搜索栏的取消按钮点击失效";
            }
            //对导航栏上面的元素进行定位
            WebElement textNavigationBar=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("我的存储")));
            //对最上方的导航栏进行长按,长按后
            //创建长按手势
            Actions actions = new Actions(driver);

            // 执行长按操作
            actions.clickAndHold(textNavigationBar)
                    .pause(Duration.ofSeconds(2))
                    .release()
                    .build()
                    .perform();

            //开始检测出现搜索栏后,页面上面的功能按钮的情况
            result=searchUiAndFeatureTest(wait,driver);
            if(!result.equals("正常")){
                return result;
            }
            System.out.println("搜素功能和搜索页面功能正常");

        }catch(TimeoutException e){
            return "我的存储会话页面输入发送消息失败";
        }

        //点击存储页面的返回
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue"))).click();

        //查看返回设置页面是否成功
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"设置\"`]")));
        }catch(TimeoutException e){
            return "返回设置页面失败";
        }
        return "正常";
    }


    //feature:搜索选项具体功能以及页面按钮是否缺失的检测----feature3用
    private String searchUiAndFeatureTest(WebDriverWait wait, AppiumDriver driver){
        //首先检查搜索框
        try{
            WebElement textBox=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("搜索")));
            textBox.click();
            textBox.sendKeys("测试");
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("展开"))).click();
        }catch(TimeoutException e){
            return "搜索栏没有出现,或者搜索栏功能存在问题";
        }

        //查看展开这个弹窗出现没有,(如果出现收起就是展开成功)
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("收起"))).click();
        }catch(TimeoutException e){
            return "收起按钮没有出现,或者收起按钮有问题";
        }

        //点击清除文本的按钮
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("清除文本"))).click();
        }catch(TimeoutException e){
            return "清楚文本按钮没有出现";
        }

        //查看日历按钮有没有出现并点击
        //日历按钮
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon input date"))).click();
            try{
                wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"取消\"`]"))).click();
            }catch (TimeoutException e){
                System.out.println("日历页面取消按钮消失");
                return"日历页面取消按钮消失";
            }

        }catch (TimeoutException e){
            System.out.println("日历按钮消失");
            return "日历按钮消失";
        }

        //上下两个箭头的检测
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("ic chevron up")));
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("ic chevron down")));
        }catch(TimeoutException e){
            return "搜索结果中上下导航按钮缺失";
        }

        //点击取消
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"取消\"`]"))).click();

        return "正常";
    }


    //feature:我的存储页面-发送各种信息-----feature4用
    private String sendMessageTest(WebDriverWait wait, AppiumDriver driver) throws InterruptedException {
        //首先发送文本信息
        try{
            WebElement textBox=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._inputTextView")));
            textBox.click();
            textBox.sendKeys("测试发送的文本消息");
            //点击发送信息
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._sendButton"))).click();
        }catch(TimeoutException e){
            return "发送信息失败";
        }
        System.out.println("文本消息发送成功");
        Thread.sleep(1000);

        //附件中发送照片
        try{
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                    "/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/" +
                    "XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView" +
                    "/XCUIElementTypeCell[2]/XCUIElementTypeOther/XCUIElementTypeImage"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("发送"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._inputTextView")));
        }catch(TimeoutException e){
            return "使用附件发送照片失败";
        }
        System.out.println("附件中发送照片成功");
        Thread.sleep(1000);


        //使用相机进行拍照
        try{
            //点击附件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            //点击相机
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]/XCUIElementTypeOther" +
                    "[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView/XCUIElementTypeCell[1]" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther"))).click();
            //点击拍照
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]/XCUIElementTypeOther[3]" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[6]/XCUIElementTypeOther" +
                    "/XCUIElementTypeImage"))).click();
            //点击发送
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"发送\"`][2]"))).click();
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._inputTextView")));
        }catch(TimeoutException e){
            return "相机拍照发送照片失败";
        }
        System.out.println("相机拍照发送照片发送成功");
        Thread.sleep(1000);

        //使用相机拍视频进行发送
        try{
            //点击附件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            //点击相机
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]/XCUIElementTypeOther" +
                    "[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView/XCUIElementTypeCell[1]" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther"))).click();
            ///点击切换到拍摄视频
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"视频\"`]"))).click();
            //点击按钮开始拍摄
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                    "/XCUIElementTypeOther[3]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[6]" +
                    "/XCUIElementTypeOther/XCUIElementTypeImage"))).click();
            System.out.println("开始录制视频");
            Thread.sleep(3000);
            //再次点击关闭拍摄
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                    "/XCUIElementTypeOther[3]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[6]" +
                    "/XCUIElementTypeOther"))).click();
            //点击发送按钮
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeButton[`name == \"发送\"`][2]"))).click();
        }catch(TimeoutException | InterruptedException e){
            return "使用相机拍摄视频发送失败";
        }
        System.out.println("相机拍视频发送成功");
        Thread.sleep(1000);


        //以文件的方式发送相册中的照片或者视频
        try{
            //点击附件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            //点击底部导航栏的文件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("文件"))).click();
            //点击从相册选择
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("从相册中选择"))).click();
            //选择第一个视频或者照片
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                    "/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView/XCUIElementTypeCell[1]"))).click();
            //点击发送按钮
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("发送"))).click();
        }catch(TimeoutException e){
            return "从文件中发送视频或者相片失败";
        }
        System.out.println("文件的形式发送照片或者视频成功");
        Thread.sleep(1000);

        //从文件中选择文件进行发送
        try{
            //点击附件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            //点击底部导航栏的文件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("文件"))).click();
            //点击从文件中选择
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("从文件中选择"))).click();
            //点击文件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeCell[1]"))).click();
        }catch(TimeoutException e){
            return "从文件中发送文件失败";
        }
        System.out.println("发送文件成功");
        Thread.sleep(1000);

        //从附件发送当前位置
        try{
            //点击附件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            //点击位置
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("位置"))).click();

            //点击发送当前位置
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("发送我的当前位置"))).click();

        }catch(TimeoutException | NoSuchElementException e){
            return "发送位置消息失败";
        }
        System.out.println("发送当亲位置成功");
        Thread.sleep(1000);

        //点击发送联系人
        try{
            //点击附件
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._attachmentButton"))).click();
            //点击联系人
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("联系人"))).click();
            //点击第一个联系人
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[1]" +
                    "/XCUIElementTypeOther[2]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther" +
                    "/XCUIElementTypeTable/XCUIElementTypeCell[1]"))).click();
            //点击弹出的确定框
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("确定"))).click();
        }catch(TimeoutException e){
            return "发送联系人失败";
        }
        System.out.println("发送联系人名片成功");
        Thread.sleep(1000);

        //点击发送表情
        try{
            //点击表情进行发送
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._stickerButton"))).click();
            //点击表情
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeStaticText[`name == \"表情\"`]"))).click();
            //随便选中一个表情
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.iOSClassChain("**/XCUIElementTypeWindow[4]" +
                    "/XCUIElementTypeOther[1]/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeScrollView" +
                    "/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView/XCUIElementTypeCell[9]"))).click();
            //点击发送
            wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._sendButton"))).click();

        }catch(TimeoutException e){
            return "发送表情失败";
        }
        System.out.println("发送表情成功");
        Thread.sleep(1000);

        //发送语音
        try{
            WebElement voiceButton=wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("MessagingApp.ConversationInputToolbar._voiceMemoButton")));
           //录音5秒
            System.out.println("录音五秒");
            //创建长按手势
            Actions actions = new Actions(driver);

            // 执行长按操作
            actions.clickAndHold(voiceButton)
                    .pause(Duration.ofSeconds(5))
                    .release()
                    .build()
                    .perform();
        }catch (TimeoutException e){
            return "发送语音失败";
        }
        System.out.println("发送语音成功");
        Thread.sleep(1000);
        //点击返回
        wait.until(ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("icon back blue"))).click();
        return "正常";
    }

}





